package com.guomei.utils;

import lombok.extern.slf4j.Slf4j;

import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 短信工具类
 */
@Slf4j
public class SmsUtils {


    /**
     * MD5加密（32位小写）
     * @param plainText 明文
     * @return 加密后字符串
     */
    public static String md5(String plainText) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(plainText.getBytes(StandardCharsets.UTF_8));
            byte[] b = md.digest();
            StringBuilder buf = new StringBuilder();
            for (byte value : b) {
                int i = value;
                if (i < 0) i += 256;
                if (i < 16) buf.append("0");
                buf.append(Integer.toHexString(i));
            }
            return buf.toString();
        } catch (NoSuchAlgorithmException e) {
            log.error("MD5加密失败", e);
            return "";
        }
    }

    /**
     * URL编码（UTF-8）
     * @param str 待编码字符串
     * @return 编码后字符串
     */
    public static String encodeUrl(String str) {
        try {
            return URLEncoder.encode(str, StandardCharsets.UTF_8.name());
        } catch (Exception e) {
            log.error("URL编码失败", e);
            return null;
        }
    }

    /**
     * 验证手机号格式
     * @param phoneNumber 手机号
     * @return 是否合法
     */
    public static boolean isValidPhone(String phoneNumber) {
        if (phoneNumber == null || phoneNumber.length() != 11) {
            return false;
        }
        // 手机号正则：1开头，第二位3-9，后9位数字
        return phoneNumber.matches("^1[3-9]\\d{9}$");
    }
}
